package top.xcxdl.rural.service;

import com.baomidou.mybatisplus.extension.service.IService;
import top.xcxdl.rural.entity.BackAuthGroupRule;
import top.xcxdl.rural.entity.BackAuthRule;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author Ding
 * @since 2022-01-27
 */
public interface IBackAuthRuleService extends IService<BackAuthRule> {

    /**
     * 获取所有权限
     *
     * @param ruleIds String 该普通管理员角色对应的权限ids字符串（诸如"1,2,3"），若为空则是超管否则是普管
     * @param roleCode   String 角色编码:ADMIN-普管，SUPER_ADMIN-超管
     * @return List<BackAuthRule> 权限实体集合
     */
    List<BackAuthRule> getAllRules(String ruleIds, String roleCode);

    /**
     * 查询改权限是否被定义为最高权限（不可分配，只有超管可以拥有）
     *
     * @param ruleIds List<Integer> 权限id集合
     * @return 若集合中存在则返回true，否则返回false
     */
    boolean checkIsForbidden(List<Integer> ruleIds);

    /**
     * 添加 or 编辑 权限
     *
     * @param bean BackAuthRule权限实体
     * @return 影响行数
     */
    int doEdit(BackAuthRule bean);

    /**
     * 删除权限 by ids
     * @param ids 权限id集合
     * @return 影响行数
     */
    int doDeleteBy(List<Integer> ids);

    /**
     * 获取当前权限树上所有的父级权限ids
     * @param ruleId 权限id
     * @return 当前权限id对应权限树的所有父、祖父、祖父祖父...直到顶级权限ids
     */
    List<Integer> getAllTopRules(Integer ruleId);

    /**
     * 根据权限ids（角色-权限联表实体集合中可获取）获取权限实体集合，但不列为树状结构，只一级展示
     * @param groupRules List<BackAuthGroupRule> 权限-角色联表实体集合
     * @param admin 权限编码：ADMIN-普管，SUPER_ADMIN-超管
     * @return List<BackAuthRule>
     */
    List<BackAuthRule> getAllRulesNoTree(List<BackAuthGroupRule> groupRules, String admin);

    /**
     * 根据角色id和请求接口id判断角色权限中是否通行此接口
     * @param groupId 角色id
     * @param requestUri 请求接口
     * @return 通行权限路径
     */
    String isRequestExist(Integer groupId, String requestUri);
}
